using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using AccesoDatos;
using Entidades;

namespace Negocio.Negocio
{
    // Clase Negocio
    public class Servicios
    {
        #region Metodos publicos

        // Devuelve la lista de servicios
        public DataTable ListaServicios(String CodigoServicio, String Descripcion,
            String Estado, String TipoServicio)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                // Seteo de valores para el criterio
                int iCriterio;
                if (CodigoServicio == "" && Descripcion == "" && Estado == "" &&  TipoServicio == "")
                {
                    iCriterio = 0; // Valor por defecto para buscar a todos
                }
                else iCriterio = 1;

                String iCodigoServicio = CodigoServicio == "" ? "0" : CodigoServicio;
                String iEstado = Estado == "" ? "0" : Estado;
                String iTipoServicio = TipoServicio == "" ? "0" : TipoServicio;

                Object[,] parmSP = { 
                    {"@iCriterio", SqlDbType.Int, 4, iCriterio},
                    {"@iCodigoServicio", SqlDbType.Int, 4, Convert.ToInt32(iCodigoServicio)},
                    {"@tDescripcionServicio", SqlDbType.VarChar, 20, Descripcion},                  
                    {"@iTipoServicioExtra", SqlDbType.Int, 4, Convert.ToInt32(iTipoServicio)},
                    {"@oEstadoServicio", SqlDbType.Int, 4, Convert.ToInt32(iEstado)},
                    
                                        
                };

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_Servicio", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("ListaServicio() - Negocio " + ex.Message);
            }
        }

        // Inserta un Tipo de Evento
        public int InsertaServicio(Entidades.Servicio servicio)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@iTipoServicioExtra", SqlDbType.Int, 4, servicio.TipoServicio},
                    {"@oEstadoServicio", SqlDbType.Int, 4, servicio.Estado},
                    {"@rImporteConIGV", SqlDbType.Decimal, 15, servicio.MontoPaqueteConIGV},
                    {"@rImporteSinIGV", SqlDbType.Decimal, 15, servicio.MontoPaqueteSinIGV},
                    {"@tDescripcionServicio", SqlDbType.VarChar, 20, servicio.Descripcion}
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_INS_Servicio", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("InsertaServicio() - " + ex.Message);
            }
        }

        // Edita un Servicio
        public int EditaServicio(Entidades.Servicio servicio)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@iCodigoServicio", SqlDbType.Int, 4, servicio.CodigoServicio},
                    {"@iTipoServicioExtra", SqlDbType.Int, 4, servicio.TipoServicio},
                    {"@oEstadoServicio", SqlDbType.Int, 4, servicio.Estado},
                    {"@rImporteConIGV", SqlDbType.Decimal, 15, servicio.MontoPaqueteConIGV},
                    {"@rImporteSinIGV", SqlDbType.Decimal, 15, servicio.MontoPaqueteSinIGV},
                    {"@tDescripcionServicio", SqlDbType.VarChar, 20, servicio.Descripcion}
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_UPD_Servicio", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("ActualizaServicio() - " + ex.Message);
            }
        }

        // Elimina un Tipo de Evento
        public int EliminaServicio(Entidades.Servicio servicio)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@iCodigoServicio", SqlDbType.Int, 4, servicio.CodigoServicio}
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_DEL_Servicio", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("EliminaServicio() - " + ex.Message);
            }
        }

        public DataTable ListaEstado()
        {

            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_Estado");
            }
            catch (Exception ex)
            {
                throw new Exception("ListaEstado() - " + ex.Message);
            }
        }

        public DataTable ListaTipoServicio()
        {

            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_TipoServicioCombo");
            }
            catch (Exception ex)
            {
                throw new Exception("ListaServicio() - " + ex.Message);
            }
        }

        #endregion
    }
}
